class RequestQueue {
	constructor() {
		this.pendingRequests = new Map();
	}

	// 发送请求的方法
	async sendRequest(url) {
		// 检查是否已经有待处理的请求
		if (this.pendingRequests.has(url)) {
			// 如果已有请求，则返回其 Promise
			return this.pendingRequests.get(url);
		}

		// 创建新的请求
		const requestPromise = this._fetchData(url)
			.then((response) => {
				// 请求成功后，从 pendingRequests 中移除该请求
				this.pendingRequests.delete(url);
				return response;
			})
			.catch((error) => {
				// 请求失败时，也要从 pendingRequests 中移除该请求
				this.pendingRequests.delete(url);
				throw error;
			});

		// 将新请求添加到 pendingRequests
		this.pendingRequests.set(url, requestPromise);

		// 返回请求的 Promise
		return requestPromise;
	}

	// 实际的获取数据的方法
	async _fetchData(url) {
		// 模拟网络请求，这里可以替换为实际的 fetch 调用
		const response = await fetch(url);
		if (!response.ok) {
			throw new Error('Network response was not ok');
		}
		return await response.json(); // 假设返回 JSON 数据
	}
}

// 使用示例
const requestQueue = new RequestQueue();

// 多个方法同时发送相同请求
async function fetchData() {
	try {
		const data = await requestQueue.sendRequest('https://10.2.14.35:16901/auth/beforeLogin');
		console.log(data);
	} catch (error) {
		console.error('Request failed:', error);
	}
}

// 调用多个相同请求
fetchData();
fetchData();
fetchData();
